<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
	<!-- ilosc zdjec na stronie -->
	<xsl:param name="pageSize" select="6" />
	<!-- folder z wygenerowanymi plikami -->
	<xsl:param name="outputDirectory" select="'out/'" />
	
	<!-- punkt wejsciowy -->
	<xsl:template match="/">
		<xsl:apply-templates/>
	</xsl:template>
	
 
	
	<!-- stworzenie indexu (strona glowna albumu)-->
	<xsl:template match="album" name="indexPage" >
		<xsl:result-document href="{$outputDirectory}index.html" method="html" encoding="UTF-8" indent="yes">
			<html lang="pl">
				<head>
					<title>Album: <xsl:value-of select="/album/fullName" /></title>
					<style type="text/css">
						body{margin:5px;}
						table{border:1px solid red;margin:0;padding:0;}
					</style>
					<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
				</head>
				<body>
					<h1>Album: <xsl:value-of select="/album/fullName" />, rok: <xsl:value-of select="/album/year" />.</h1>
					<p>Ilość zdjęć na stronie: <xsl:value-of select="$pageSize"/> </p>
					<ul>
						<xsl:for-each select="//photo[position() mod $pageSize=1]">	
							<li>Strona: 
								<xsl:call-template name="photoPageLink">
									<xsl:with-param name="pageNo" select="position()"/>
								</xsl:call-template>
							</li>
						</xsl:for-each>
					</ul>
				</body>
			</html>
		</xsl:result-document>
		<xsl:apply-templates/>
	</xsl:template>
 	
 	<!-- generuje link do strony ze zdjeciami -->
	<xsl:template name="photoPageLink">
		<xsl:param name="pageNo" required="yes"/>
		<a>
			<xsl:attribute name="href">page<xsl:value-of select="$pageNo"/>.html</xsl:attribute>
			<xsl:value-of select="$pageNo"/>
		</a>
	</xsl:template>
	
	<!-- stworzenie stron -->
	<xsl:template match="photos" name="photoPages">
		<!-- wybierz kazdy node, ktory jest pierwszy na kazdej stronie i na kazdym z nich zastosuj szablon -->
		<xsl:for-each select="photo[position() mod $pageSize = 1]">	
			<xsl:call-template name="photoPage">
				<xsl:with-param name="pageNo" select="position()"/>
			</xsl:call-template>
		</xsl:for-each>
	</xsl:template>
	
	<!-- generuje nawigacje po stronach -->
	<xsl:template name="pager">
		<xsl:param name="pageNo" required="yes"/>
		<xsl:choose>
			<xsl:when test="$pageNo=1">
				<a href="#">&lt;&lt;</a>
			</xsl:when>
			<xsl:otherwise>
				<a href="page{$pageNo - 1}.html">&lt;&lt;</a>
			</xsl:otherwise>
		</xsl:choose>
		<xsl:for-each select="//photo[position() mod $pageSize = 1]">	
			<xsl:choose>
				<xsl:when test="position() = $pageNo">
					<a href="#">[<xsl:value-of select="position()"/>]</a>
				</xsl:when>
				<xsl:otherwise>
					<xsl:call-template name="photoPageLink">
						<xsl:with-param name="pageNo" select="position()"/>
					</xsl:call-template>
				</xsl:otherwise>
			</xsl:choose>
		</xsl:for-each>
		<xsl:choose>
			<xsl:when test="($pageNo * $pageSize) >= count(//photo)">
				<a href="#">&gt;&gt;</a>
			</xsl:when>
			<xsl:otherwise>
				<a href="page{$pageNo + 1}.html">&gt;&gt;</a>
			</xsl:otherwise>
		</xsl:choose>
	</xsl:template>
	
	<!-- stworzenie jednej strony -->
	<xsl:template name="photoPage">
		<xsl:param name="pageNo"/>
		<xsl:variable name="last" select="$pageNo * $pageSize"/>
		<xsl:variable name="first" select="$last - $pageSize + 1"/>
		<xsl:result-document href="{$outputDirectory}page{$pageNo}.html" method="html" encoding="UTF-8" indent="yes">
			<html lang="pl">
				<head>
					<title><xsl:value-of select="/album/fullName" />, strona: <xsl:value-of select="$pageNo"/></title>
					<style type="text/css">
						body{margin:5px;}
						table{border:1px solid red;margin:0;padding:0;}
						a{margin:2px;}
					</style>
					<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
				</head>
				<body>
					<h1>Album: <xsl:value-of select="/album/fullName" />, rok: <xsl:value-of select="/album/year" />, strona: <xsl:value-of select="$pageNo"/>.</h1>
					<a href="index.html">Strona główna albumu</a>
					<p>Zdjęcia od: <xsl:value-of select="number($first)"/> do: <xsl:value-of select="number($last)"/>.</p>
					<table style="border: 1px solid red">
						<!-- Wybiera wszystkie nody, ktorych pozycja w pliku wejsciowym jest nieparzysta, czyli 1,3,5..
							i na tak wybranej kolekcji zastosowuje szablony zdefiniowane w dokumencie
						 -->
						<xsl:apply-templates select="//photo[(position() mod 2=1) and (position() >= $first) and ($last >= position())] " />
					</table>
 					<p>
 						<xsl:call-template name="pager">
 							<xsl:with-param name="pageNo" select="$pageNo"/>
 						</xsl:call-template>
 					</p>
				</body>
			</html>
		</xsl:result-document>
	</xsl:template>
	
	<!-- ten szablon pasuje do noda, ktory nazywa sie photo, zatem zostanie uruchomiony dla kazdego noda wybranego z warunku: 
		//photo[position() mod 2=1]
	-->
	<xsl:template match="photo" name="photo">
		<tr>
			<td>
				<table width="458" border="0" align="left" cellpadding="0" cellspacing="0">
					<tr>
						<td><xsl:call-template name="left" /></td>
						<td width="30"></td>
						<td align="left">
							<xsl:if test="count(following-sibling::photo) != 0">
								<xsl:call-template name="right">
									<xsl:with-param name="photo" select="following-sibling::photo[1]"/>
								</xsl:call-template>
							</xsl:if>
							<!-- jesli nie do nie rob nic -->
						</td>
					</tr>
				</table>
			</td>
		</tr>
	</xsl:template>
	
 	<!-- ten szablon bedzie odpowiedzialny za generowanie zawartosci tabeli po lewej stronie, tutaj wrzuc to co ma byc na wyjsciu -->
	<xsl:template name="left">
		Zdjęcie: <xsl:value-of select="." /><br/>szblon: left
		<a class="czarny">
			<xsl:attribute name="href">javascript:zoom('./galerie/rok<xsl:value-of select="concat(/album/year, '/', /album/shortName, /album/year, '/', ./text())"/>')</xsl:attribute>
			Link do zdjęcia
		</a>
	</xsl:template>
	
 	<!-- ten szablon bedzie odpowiedzialny za generowanie zawartosci tabeli po prawej stronie, tutaj wrzuc to co ma byc na wyjsciu, 
 	poniewaz ten szablon bedzie wywolywany recznie, nie przez procesor, node przekazany zostanie jako parametr, dlatego trzeba sie 
 	dostawac do niego przez $photo-->
	<xsl:template name="right">
		<xsl:param name="photo" />
		Zdjęcie: <xsl:value-of select="$photo/text()" /><br/>szblon: right
		<a class="czarny">
			<xsl:attribute name="href">javascript:zoom('./galerie/rok<xsl:value-of select="concat(/album/year, '/', /album/shortName, /album/year, '/', $photo/text())"/>')</xsl:attribute>
			Link do zdjęcia
		</a>
	</xsl:template>
	
	<xsl:template match="node()|@*">
		<xsl:apply-templates />
	</xsl:template>
	 
</xsl:stylesheet>